package allaboutmybook;

import java.util.HashMap;
import java.util.LinkedList;

import dao.DAOConcretoResenhas;
import dao.DAOResenhas;
import excecoes.CampoImportanteEmBrancoException;
import excecoes.ChaveJaExisteException;
import excecoes.DAOException;

public class GerenteConcretoDasResenhas implements GerenteDasResenhas
{
	private static GerenteConcretoDasResenhas gerenteDasResenhas = null;
	private DAOResenhas daoResenhas;
	
	private GerenteConcretoDasResenhas()
	{
		
		this.daoResenhas = new DAOConcretoResenhas();
	}
	
	public static GerenteConcretoDasResenhas getInstance()
	{
		if(gerenteDasResenhas == null)
		{
			gerenteDasResenhas = new GerenteConcretoDasResenhas();
		}
		
		return gerenteDasResenhas;
	}
	
	public HashMap<String,String> pegarTitulosENotasDeTodasAsResenhas() throws DAOException
	{
		
		HashMap<String,String> titulosENotasDeTodasAsResenhas = new HashMap<String,String>();
			
			LinkedList<Resenha> todasAsResenhas = this.daoResenhas.pegarTodasAsResenhas();
			for(int i = 0; i < todasAsResenhas.size(); i++)
			{
				Resenha umaResenha = todasAsResenhas.get(i);
				String tituloDaResenha = umaResenha.getTitulo();
				String notaDaResenha = umaResenha.getNota();
				titulosENotasDeTodasAsResenhas.put(tituloDaResenha, notaDaResenha);
			}
			
			return titulosENotasDeTodasAsResenhas;
	}
	
	public void adicionarNovaResenha(String titulo, String nota,
											String autorResenha, String textoResenha) throws ChaveJaExisteException, DAOException, CampoImportanteEmBrancoException
	{
		if(titulo == null || autorResenha == null || textoResenha == null || titulo.length() <= 0 ||
				autorResenha.length() <= 0 || textoResenha.length() <= 0)
		{
			throw new CampoImportanteEmBrancoException();
		}
		else
		{
			Resenha novaResenha = new Resenha(titulo,nota,autorResenha,textoResenha);
			
			try
			{
				this.daoResenhas.adicionarNovaResenha(novaResenha);
			}
			catch(ChaveJaExisteException exc)
			{
				throw new ChaveJaExisteException();
			}
		}
			
		
		
		
		
	}

	@Override
	public Resenha pegarResenha(String tituloResenha) throws DAOException
	{
		return this.daoResenhas.getResenha(tituloResenha);
		
	}

	@Override
	public void removerResenha(String tituloResenha) throws DAOException 
	{
		this.daoResenhas.removerResenha(tituloResenha);
		
	}

	@Override
	public void editarResenha(String titulo, String nota, String autor,
			String texto) throws DAOException 
	{
		this.daoResenhas.editarResenha(titulo, nota, autor, texto);
		
	}

}
